package xyz.zhno.mall.common.web.handler;

import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import xyz.zhno.mall.common.core.enums.ErrorCodeEnum;
import xyz.zhno.mall.common.core.exception.APIException;
import xyz.zhno.mall.common.core.vo.ResultVO;

/**
 * 全局异常处理
 * @author zh_o
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 参数校验异常处理
     */
    @ExceptionHandler({BindException.class})
    public ResultVO<Void> methodArgumentNotValidHandler(BindException e) {
        e.printStackTrace();
        return ResultVO.fail("B3000",
                e.getBindingResult().getAllErrors()
                        .get(0).getDefaultMessage());
    }

    /**
     * 自定义异常处理
     */
    @ExceptionHandler(APIException.class)
    public ResultVO<Void> apiExceptionHandler(APIException e) {
        e.printStackTrace();
        return ResultVO.fail(e.getCode(), e.getMessage());
    }

    /**
     * 其他异常处理
     */
    @ExceptionHandler(Exception.class)
    public ResultVO<Void> exceptionHandler(Exception e) {
        e.printStackTrace();
        return ResultVO.fail(ErrorCodeEnum.SERVER_ERROR.getCode(), ErrorCodeEnum.SERVER_ERROR.getMessage());
    }

}
